package cn.huaqingcheng.tool.crypto.digest;

import cn.huaqingcheng.tool.crypto.codec.Base64Tool;
import cn.huaqingcheng.tool.crypto.codec.HexTool;

import java.io.InputStream;
import java.nio.charset.StandardCharsets;

/**
 * 摘要算法
 *
 * @see DigestAlgorithm
 */
@SuppressWarnings("unused")
public interface MD5Tool {

    /**
     * 计算一个字节流, 使用 1M 缓冲区
     *
     * @param is 输入流, 执行完会关闭输入流
     */
    static byte[] digest(InputStream is) {
        return DigestTool.digest(DigestAlgorithm.MD5, is);
    }

    /**
     * 计算一个字节流
     *
     * @param is  输入流, 执行完会关闭输入流
     * @param len 每次读取的字节数组大小 (缓冲区)
     */
    static byte[] digest(InputStream is, int len) {
        return DigestTool.digest(DigestAlgorithm.MD5, is, len);
    }

    /**
     * 计算摘要, 并转为 16进制字符串
     */
    static String digestHex(String input) {
        return HexTool.formatHex(digest(input.getBytes(StandardCharsets.UTF_8)));
    }

    /**
     * 计算摘要
     */
    static byte[] digest(byte[] input) {
        return DigestTool.digest(DigestAlgorithm.MD5, input);
    }

    static String digestHex(byte[] input) {
        return HexTool.formatHex(digest(input));
    }

    /**
     * 计算摘要, 并转为 base64编码字符串
     */
    static String digestBase64(String input) {
        return Base64Tool.encodeToStr(digest(input.getBytes(StandardCharsets.UTF_8)));
    }

}
